// import {of} from 'rxjs';

class Observable {
    constructor(private _subscribe) {
    }

    //订阅方法
    subscribe(observer) {
        return this._subscribe(observer);
    }
}

// 定义一个from函数。创建可观察对象的函数，它可以接收各种可迭代对象(数组，promise，迭代器),并把它们转为可观察对象
function from(input) {
    return new Observable((observer) => {
        if (input instanceof Promise) {
            input.then(value => {
                observer.next(value)
                observer.complete()
            },error=>{
                observer.error(error)
            })
        } else {
            for (let value of input) {
                observer.next(value)
            }
            observer.complete();
        }

    });
}

//of 创建可观察对象的函数，他接受任意数量的参数，并将这些参数作为数据项发出
from([1, 2, 3]).subscribe({
    next: console.log,
    error: console.error,
    complete: () => {
        console.log('success')
    }
})

from(Promise.resolve('hello')).subscribe({
    next: console.log,
    error: console.error,
    complete: () => {
        console.log('Promise success')
    }
})
